## 第15课 蓝牙遥控智能车

### （1）项目介绍：

前面课程中，我们利用红外控制智能车运动，在这课程中我们可以做一个蓝牙控制智能车。既然是控制智能车，那就有一个控制端和被控制端。课程中我们把手机当做控制端（主机），蓝牙模块（从机）连接的智能车当做被控制端。使用时，我们需要在手机上安装一个APP，然后连接蓝牙模块，然后我们利用蓝牙APP上各个按钮，控制智能车实现各种运动状态。

### （2）流程图：

先取下蓝牙模块，程序代码上传后，再连接蓝牙模块和打开串口监视器，设置波特率为9600。对准蓝牙模块按下手机APP按钮，我们可以看到APP按钮对应的控制字符，如下图。

![](media/image1.png)

经过测试，我们得出了手机APP上各个按钮对应的控制字符和各个按钮对应的功能，这里我们整理了一个表格如下：

| 按钮: ![](media/image2.png) | 功能：配对连接蓝牙模块 | 功能：配对连接蓝牙模块 |
| --- | --- | --- |
| 按钮: ![](media/image3.png) | 功能：进入蓝牙控制界面 | 功能：进入蓝牙控制界面 |
| 按钮: ![](media/image4.png) | 功能：断开蓝牙连接 | 功能：断开蓝牙连接 |
| 按钮: ![](media/image5.png) | 控制字符：按下：F；松开：S | 功能：按下，小车前进；松开就停止 |
| 按钮: ![](media/image6.png) | 控制字符：按下：B；松开：S | 功能：按下，小车后退；松开就停止 |
| 按钮: ![](media/image7.png) | 控制字符：按下：L；松开：S | 功能：按下，小车左旋转；松开就停止 |
| 按钮: ![](media/image8.png) | 控制字符：按下：R；松开：S | 功能：按下，小车右旋转；松开就停止 |
| 按钮: ![](media/image9.png) | 控制字符：按下：a；松开：S | 功能：点击，加速，最大加到255 |
| 按钮: ![](media/image10.png) | 控制字符：按下：d；松开：S | 功能：点击，减速，最小减到0 |
| 按钮: ![](media/image11.png) | 控制字符： | 功能：点击一下开启手机方向感应控制，再点击一下退出方向感应控制 |
| 按钮: ![](media/image12.png) | 控制字符：点击发送：Y,再次电机发送S | 功能：开启避障功能，再次点击退出 |
| 按钮: ![](media/image13.png) | 控制字符：点击发送：X,再次电机发送S | 功能：开启循线功能，再次点击退出 |
| 按钮: ![](media/image14.png) | 控制字符：点击发送：U,再次电机发送S | 功能：开启超声波跟随功能，再次点击退出 |
| 按钮: ![](media/image15.png) | 控制字符：点击发送：G,再次电机发送S | 功能：开启画地为牢功能，再次点击退出 |

### （3）接线图：蓝牙+电机

![](media/image16.png)

**接线注意：** 蓝牙模块的RXD、TXD、GND、VCC分别对应的接到电机驱动扩展板上的TX、RX、-（GND）、+（VCC），而蓝牙模块的STATE和BRK两引脚不需要接，电源接到BAT接口。

B两电机分别对应的连接到电机驱动扩展板上的接口A和接口B；蓝牙模块的RXD、TXD、GND、VCC分别对应的接到电机驱动扩展板上的TX、RX、-（GND）、+（VCC），而蓝牙模块的STATE和BRK两引脚不需要接，电源接到BAT接口。

### （4）测试代码：

| ①初始化 | ![](media/image17.png) |
| --- | --- |
| ②设置串口波特率为9600 | ![](media/image18.png) |
| ③设置点阵8x16的时钟（SCL）引脚为SCL，数据（SDA）引脚为SDA；<br />SCL相对应主板上的A5，SDA相对应主板上的A4。 | ![](media/image19.png) |
| ④点阵8x16清屏 | ![](media/image20.png) |
| ⑤点阵8x16显示“V”图案 | ![](media/image21.png) |
| ⑥蓝牙BLE模块接收蓝牙数据并在串口监视器中读取打印出来 | ![](media/image22.png) |
| ⑦变量bluetooth_val的值与各个case逐个进行比较 | ![](media/image23.png) |
| ⑧当变量bluetooth_val的值是F时,执行case下的命令（代码）并退出switch-case语句体 | ![](media/image24.png) |
| ⑨小车以PWM200的速度前进 | ![](media/image25.png) |
| ⑩点阵8x16显示“↑”图案 | ![](media/image26.png) |
| ⑪当变量bluetooth_val的值是B时,执行case下的命令（代码）并退出switch-case语句体 | ![](media/image27.png) |
| ⑫小车以PWM200的速度后退 | ![](media/image28.png) |
| ⑬点阵8x16显示“↓”图案 | ![](media/image29.png) |
| ⑭当变量bluetooth_val的值是L时,执行case下的命令（代码）并退出switch-case语句体 | ![](media/image30.png) |
| ⑮小车以PWM250的速度左旋转 | ![](media/image31.png) |
| ⑯点阵8x16显示“←”图案 | ![](media/image32.png) |
| ⑰当变量bluetooth_val的值是R时,执行case下的命令（代码）并退出switch-case语句体 | ![](media/image33.png) |
| ⑱小车以PWM250的速度右旋转 <br />⑲点阵8x16显示“→”图案 | ![](media/image34.png) |
| ⑳当变量bluetooth_val的值是S时,执行case下的命令（代码）并退出switch-case语句体 | ![](media/image35.png) |
| ㉑小车停止 | ![](media/image36.png) |
| ㉒点阵8x16显示“STOP”图案 | ![](media/image37.png) |

**完整代码：**

![](media/image38.png)

好了，按住蓝牙APP的前进、后退、左转弯、右转弯、停止、左旋转、右旋转的按钮控制桌面迷你蓝牙智能车分别前进、后退、左转弯、右转弯、停止、左旋转、右旋转的程序代码全编写完了。上传程序，看看效果。**（在上传测试代码前，需要把蓝牙模块取下，否则代码会上传失败。需要上传代码成功后，再连接蓝牙模块。）** 

### （5）测试结果：

将驱动扩展板堆叠在UNO Plus板上，上传好代码，按照接线图接线，将拨码开关拨至ON端后，手机APP连接蓝牙成功后，我们就能用手机APP控制智能车运动并在LED灯板上显示对应的图案了。

按下按钮 ![](media/image39.png) ，小车前进；

按下按钮 ![](media/image40.png) ，小车后退；

按下按钮 ![](media/image41.png) ，小车左旋转；

按下按钮 ![](media/image42.png) ，小车右旋转；

点击一下按钮 ![](media/image43.png) ，开启手机方向感应控制，

再点击一下按钮 ![](media/image44.png) ，退出方向感应控制。
